package com.liveneo.stoat.common.util;

import java.io.UnsupportedEncodingException;

import org.apache.commons.codec.binary.Base64;

import com.google.gson.Gson;
/**
 * 
 *@Description: Json处理
 *@Author:hjt 
 *@Since:2017年1月22日 下午3:20:22 
 *@Version:1.0.0
 */
public class JsonUtils {
	/**
	  * @Title: toJson
	  * @Description:  json转换
	  * @param @param obj
	  * @throws
	  */
	public static String toJson(Object obj){
		Gson gson = new Gson();
		return gson.toJson(obj);
	}
	
	/**
	 * 通过Json字符串转换为指定对象
	 * @param jsonData
	 * @param type
	 * @return
	 */
	public static <T> T fromJson(String jsonData, Class<T> type){
		Gson gson = new Gson();
		return gson.fromJson(jsonData, type);
	}
	
	
	/**
	 * 对象转换为base64加密字符串
	 * @param enc 使用编码
	 * @return 对象的json的base64加密串
	 * @throws UnsupportedEncodingException 
	 */
	public static String toJsonWithBase64(Object obj, String enc) {
		//对象转换成Json字符串
		String jsonStr = JsonUtils.toJson(obj);
		String jsonStrWithBase64 = null;
		try {
			//base64加密
			jsonStrWithBase64 = Base64.encodeBase64String(jsonStr.getBytes(enc));
		} catch (UnsupportedEncodingException e){
			throw new RuntimeException(e);
		}
		return jsonStrWithBase64;
	}
	
	/**
	 * base64加密字符串转换为对象
	 * @param enc 使用编码
	 * @return 对象的json的base64加密串
	 * @throws UnsupportedEncodingException 
	 */
	public static <T> T fromJsonWithBase64(String base64JsonData, Class<T> type, String enc) {
		//对象转换成Json字符串
		String jsonStrWithBase64 = null;
		
		try {
			//base64加密
			jsonStrWithBase64 = new String(Base64.decodeBase64(base64JsonData.getBytes(enc)), enc);
		} catch (UnsupportedEncodingException e){
			throw new RuntimeException(e);
		}
		
		T obj = JsonUtils.fromJson(jsonStrWithBase64, type);
		
		return obj;
	}
	
	/**
	 * 对象转换为base64加密字符串（使用UTF-8编码）
	 * @return 对象的json的base64加密串
	 * @throws UnsupportedEncodingException 
	 */
	public static String toJsonWithBase64(Object obj) {
		return JsonUtils.toJsonWithBase64(obj, "UTF-8");
	}
	
	
	/**
	 * base64加密字符串转换为对象（使用UTF-8编码）
	 * @return 对象的json的base64加密串
	 * @throws UnsupportedEncodingException 
	 */
	public static <T> T fromJsonWithBase64(String base64JsonData, Class<T> type) {
		return JsonUtils.fromJsonWithBase64(base64JsonData, type, "UTF-8");
	}
	
	
	
	/**
	 * base64加密字符串转换为对象
	 * @param enc 使用编码
	 * @return 对象的json的base64加密串
	 * @throws UnsupportedEncodingException 
	 */
	public static String fromBase64WithJson(String base64JsonData) {
		//对象转换成Json字符串
		String jsonStrWithBase64 = null;
		try {
			//base64解密
			jsonStrWithBase64 = new String(Base64.decodeBase64(base64JsonData.getBytes("utf-8")), "utf-8");
		} catch (UnsupportedEncodingException e){
			throw new RuntimeException(e);
		}
		return jsonStrWithBase64;
	}
}
